大家好,今天算是把前幾天提到的 i18n
、log
、orm
、gin
、RESTful
與 clean architecture
的概念做一個整理,簡單的做一個 使用者管理 API
出來,今天使用了我自己封裝的 cxgateway 實作,廢話不多說,就讓我們開始吧!
做出可以對使用者進行 CRUD 的 API,要符合以下幾個要求
繁體中文
mariadb
作為資料庫log
輸出等級為 info
,使用 json
格式/api/v1/user
model
的資料夾,在此資料夾內建立 model.go
/
/model
- model.go
model.go
內建立一個名為 User
的 struct
,並且給予簡單的 id
、username
、email
與 phone
四個欄位type User struct {
ID string `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
Phone string `json:"phone"`
}
首先,先在根目錄建立一個名為 module
的資料夾,接著在底下建立 user
的資料夾,此時的資料夾結構如下
/
/model
- model.go
/module
/user
接著我們建立 interface 來進行方法宣告
在 /module/user
底下建立名為 repository.go
的檔案,填寫內容如下
package user
import "sample_api/model"
type Repository interface {
GetUserList(map[string]interface{}) ([]*model.User, error)
GetUser(in *model.User) (*model.User, error)
CreateUser(in *model.User) (*model.User, error)
ModifyUser(in *model.User, data map[string]interface{}) (*model.User, error)
DeleteUser(in *model.User) error
}
在 /module/user
底下建立名為 service.go
的檔案,填寫內容如下
type Service interface {
GetUserList(map[string]interface{}) ([]*model.User, error)
GetUser(in *model.User) (*model.User, error)
CreateUser(in *model.User) (*model.User, error)
ModifyUser(in *model.User, data map[string]interface{}) (*model.User, error)
DeleteUser(in *model.User) error
}
最後我們在 /module/user
底下建立名為 delivery
的資料夾,在其內建立 handler.go
,內容如下
package delivery
import "github.com/gin-gonic/gin"
type HttpHandler interface {
GetUserList(c *gin.Context)
GetUser(c *gin.Context)
CreateUser(c *gin.Context)
ModifyUser(c *gin.Context)
DeleteUser(c *gin.Context)
}
目前專案的架構會像是這樣
/
/model
- model.go
/module
/user
/delivery
- handler.go
- repository.go
- service.go
今天我們先將專案所需的架構建構出來,明天讓我們實作他們吧!
程式範例我放在個人的 github 中,有興趣的朋友可以到 https://github.com/codingXiang/sample_api
Service interface 的內容是否有誤?
根據你 Clean Architecture 那篇內容應為 login 和 Register (?)
是的,感謝提醒!